package cn.xuqiudong.backend.module.system.main.service;

import cn.dev33.satoken.stp.StpUtil;
import cn.xuqiudong.backend.base.helper.SaSessionHelper;
import cn.xuqiudong.backend.base.helper.SessionUserInfo;
import cn.xuqiudong.backend.module.system.main.model.request.UserLoginRequest;
import cn.xuqiudong.backend.module.system.main.model.response.ApiLoginResponse;
import cn.xuqiudong.backend.module.system.user.model.SysUser;
import cn.xuqiudong.backend.module.system.user.service.SysUserService;
import cn.xuqiudong.common.base.model.BaseResponse;
import cn.xuqiudong.common.util.encrypt.PasswordUtils;
import org.springframework.stereotype.Service;

import jakarta.annotation.Resource;

/**
 * 描述:
 *
 * @author Vic.xu
 * @since 2025-02-07 17:13
 */
@Service
public class AuthService {

    @Resource
    private SysUserService userService;

    /**
     * 登录
     * @param loginRequest 登录参数
     */
    public BaseResponse<ApiLoginResponse> login(UserLoginRequest loginRequest){
        SysUser user = userService.findByUsername(loginRequest.getUsername());
        if (user == null) {
            return BaseResponse.error("用户不存在");
        }
        if (!PasswordUtils.validatePassword(loginRequest.getPassword(), user.getPassword())) {
            return BaseResponse.error("用户名或密码错误");
        }
        //  true 记住我模式 sa-token.timeout-remember-me;  false:仅使用默认 8 小时模式  受 sa-token.timeout 配置控制
        StpUtil.login(user.getId(), loginRequest.isRememberMe());
        String token = StpUtil.getTokenValue();
        ApiLoginResponse response = new ApiLoginResponse(token);
        SessionUserInfo userInfo = new SessionUserInfo(user);
        SaSessionHelper.storeUser(userInfo);
        return BaseResponse.success(response);
    }

    public void logout() {
        // 登出 清空 Session 信息
        StpUtil.logout();
    }
}
